package Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTextField;

import Modelo.Cooperativa;
import Modelo.Empleado;
import Modelo.Recibo;
import Modelo.Ruta;
import Modelo.Socio;
import Modelo.TipoUnidad;
import Modelo.Unidad;
import Vista.VSocio;
import Modelo.Terminal;
import Controlador.CUnidad;
import Vista.VUnidad;


@SuppressWarnings("all")
public class CSocio implements ActionListener {
	
	private Cooperativa co;
	private Socio so;
	private VSocio vso;
	private int varBusqueda;
	private Terminal ter;
	private Unidad uni;
	private TipoUnidad tu; 
	private Recibo recibo;

	CUnidad cuni;
	VUnidad vuni;


	private CCooperativa controladorcooperativa;

	

	public CSocio(Cooperativa co, Terminal ter, CCooperativa controladorcooperativa){
		
		super();

		this.tu = tu;
		this.uni = uni;
		this.ter = ter;
		this.co = co;
		this.vso = new VSocio(this, cuni);
		this.vso.setVisible(true);
		this.so = new Socio();
		this.vso = vso;
		
	
		this.controladorcooperativa = controladorcooperativa;
		DefinirCooperativa();
		vso.getTxtCooperativa().setEnabled(false);
		
	
		vso.limpiarTabla();
		llenarTabla();

		

		
		

	}
	
public void CargarUnidades() {
		
		
		
		
			
			
		
			
		
				try {
					FileReader lectorarchivo = new FileReader("archivos/Unidades.txt");
					BufferedReader bufferedReader = new BufferedReader(lectorarchivo);
					
					String linea = bufferedReader.readLine();
					while (linea != null) {
						
						String placa = linea;
						String marca = bufferedReader.readLine();
						TipoUnidad tipounidad = co.buscarTipoUnidadNombre(bufferedReader.readLine());
						Socio socio = co.buscarSocio(bufferedReader.readLine());
						String chofer = bufferedReader.readLine();
						
						ArrayList<Recibo> recibos = new ArrayList<Recibo>();
						
						Unidad uni = new Unidad();
						
						uni.setPlaca(placa);
						uni.setMarca(marca);
						uni.setTipounidad(tipounidad);
						uni.setSocio(socio);
						uni.setChofer(chofer);
						uni.setEstatus('A');
						uni.setRecibos(recibos);
						
						
						so.agregarUnidad(uni);
						
						linea = bufferedReader.readLine();

					}
				} catch (Exception ex) {

				}
				
			
			}
		
			
			

			
		
		
		
	

	
	
	//Metodos Para accionar los botones

	@Override
	public void actionPerformed(ActionEvent e) {
	      if(e.getActionCommand().toLowerCase().equals("modificar"))
	      {
	    	  		Modificar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("guardar"))
	      {
	    	  		Guardar();
	      }else if(e.getActionCommand().toLowerCase().equals("limpiar"))
	      {
	    	  Limpiar();
	      }else if(e.getActionCommand().toLowerCase().equals("eliminar"))
	      {
	    	  Eliminar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("buscar")){
	    	  Buscar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("registrar unidad")){
	    	  AgregarUnidad();
	    	
	      }
	      
	}
	
	public void DefinirCooperativa(){
		
				
				vso.getTxtCooperativa().setText(co.getDescripcion().toString());
		
	}
	
	public void GuardarArchivo(String codigo, String nombre, String telefono, String cooperativa){

			
			Socio so = new Socio();
			so.setCedula(codigo);
			so.setNombre(nombre);
			so.setTelefono(telefono);
			so.setCooperativaPertenece(cooperativa);
		
				
			co.agregarSocio(so);
		
			
		
			
			
			

	}
	
	//Metodos de los botones
	
	public void Guardar(){
		
		if(existeSocio())
		{
			if(validarDatos()){	
				Socio so = new Socio();

				so.setCedula(vso.getTxtCodigo().getText().toString());
				so.setNombre(vso.getTxtDescripcion().getText().toString());
				so.setCooperativaPertenece(ter.buscarCooperativaNombre(vso.getTxtCooperativa().getText()).getCodigo().toString());
				so.setTelefono(vso.getTxtTelefono().getText());
				co.agregarSocio(so);
				JOptionPane.showMessageDialog(null, "Registro de Socio Exitoso", "Guardar Ruta"  , 1);
				vso.getTxtCodigo().setText("");
				vso.getTxtDescripcion().setText("");
				vso.getTxtTelefono().setText("");
				
				vso.limpiarTabla();
				llenarTabla();
				
			}
		}
				
	}
	
	public void Limpiar()
	{
		//pone los campos de texto en blanco
		vso.getTxtCodigo().setText("");
		vso.getTxtDescripcion().setText("");
		
		vso.getTxtTelefono().setText("");
		//habilita todos los botones
		vso.getBtnBuscar().setEnabled(true);
		vso.getBtnEliminar().setEnabled(true);
		vso.getBtnModificar().setEnabled(true);
		vso.getBtnGuardar().setEnabled(true);
		vso.getBtnAgregarUnidad().setEnabled(true);
		
		//habilita todos los campos de texto
		
		vso.getTxtCodigo().setEnabled(true);
		vso.getTxtDescripcion().setEnabled(true);
		vso.getTxtTelefono().setEnabled(true);
		varBusqueda = 0;
		
	
		
	}
	
	public void Modificar(){
		
	}
	
	public void Eliminar(){
		
	}
	
	public void Buscar(){
		
		Socio sociobuscado;
		if((vso.getTxtCodigo().getText().equals(""))){
			vso.mostrarMensaje("Debe llenar el campo codigo para poder buscar");		
		}else if(vso.getTxtCodigo().getText().toString() != "")
		{
			String codigo = vso.getTxtCodigo().getText().toString();
				
				if(co.buscarSocio(codigo) == null){
					vso.mostrarMensajeError("La cedula " + codigo + " no existe en el arreglo");
				}else{
				
				sociobuscado = co.buscarSocio(codigo);


				vso.getTxtCodigo().setEnabled(false);
				vso.getTxtDescripcion().setEnabled(false);
				vso.getTxtTelefono().setEnabled(false);
				vso.getTxtDescripcion().setText(sociobuscado.getNombre().toString());
				vso.getTxtTelefono().setText(sociobuscado.getTelefono().toString());

				
				
				vso.getBtnGuardar().setEnabled(false);
				vso.getBtnBuscar().setEnabled(false);
				varBusqueda = 3;
			}
				
			
		}
	}
	
	public void llenarTabla() {
		

		

		for (int k = 0; k < co.contarSocios(); k++) {
				
				if(co.getSocios().get(k).getCooperativaPertenece().equals(co.getCodigo())){
					
				
					Vector<String> datos = new Vector<String>(2, 1);
					
					
					String cedula = co.obtenerSocio(k).getCedula();
					String nombre = co.obtenerSocio(k).getNombre();
				
					datos.add(cedula);
					datos.add(nombre);
					
					vso.agregarFilaTblRutas(datos);
				}
				
		}
	}
	
	public void AgregarUnidad(){
		
		Cooperativa co = ter.buscarCooperativaNombre(vso.getTxtCooperativa().getText());
		
		if(co.contarTiposUnidad() == 0){
			vso.mostrarMensaje("Para poder registrar unidades debe tener algun tipo de unidad");		
			controladorcooperativa.RegistrarTipoUnidad();
		}else{
			
					if(validarDatos()){
							Buscar();
							if(varBusqueda==3){
							//so.setCedula(vso.getTxtCodigo().getText().toString());
							
								so = co.buscarSocio(vso.getTxtCodigo().getText());
							
							CUnidad ventanaunidad = new CUnidad(so, co, this);
							
									if(so.contarUnidades()==0){
									CargarUnidades();
									}
									ventanaunidad.llenarTabla();
						
							
							}else
							{
								vso.mostrarMensaje("Debe registrar una unidad a un socio que exista");	
								
							}
							
							
					}
	}
		
		
		
	}
	

			public boolean existeSocio(){
				
				if (co.buscarSocio(vso.getTxtCodigo().getText())!= null){
					vso.mostrarMensaje("Ya este socio con cedula " + vso.getTxtCodigo().getText() + " existe");
					return false;
				}
				
				return true;
			}
	// Metodo para validar los datos
	
			public boolean validarDatos(){
				
				Cooperativa co = ter.buscarCooperativaNombre(vso.getTxtCooperativa().getText());
				
				if(vso.getTxtCodigo().getText().toString().equalsIgnoreCase("")){
					vso.mostrarMensaje("Debe ingresar un codigo de socio");
					return false;
				}else if (vso.getTxtDescripcion().getText().toString().equalsIgnoreCase("")){
					vso.mostrarMensaje("Debe ingresar un nombre de socio");
					return false;
				}else if (vso.getTxtCooperativa().getText().toString().equalsIgnoreCase("")){
					vso.mostrarMensaje("Debe ingresar una cooperativa a la que pertenece el socio");
					return false;
				
				}
				
				return true; //en caso de que esten llenos los campos
				
			}
	
}
